package finance

import (
	"beegoProject14/models/my_center"
	"beegoProject14/utils"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	"math"
	"time"
)

type FinanceController struct {
	beego.Controller
}

func (c *FinanceController) Get() {

	// 1 财务中心需要显示所有数据
	o := orm.NewOrm()
	qs := o.QueryTable("sys_salary_slip")

	/*
		5 分页模块
	*/
	// 每页显示数据 (pagePerNum)
	pagePerNum := 8

	// 当前页 (currentPage)
	currentPage, err := c.GetInt("page")
	// err 当点击页面时候没有获取到当前页也就是null，所以默认显示第一页
	if err != nil {
		currentPage = 1
	}

	offsetNum := pagePerNum * (currentPage - 1)

	var count int64 = 0
	salarySlips := []my_center.SalarySlip{}

	// 获取日期
	month := c.GetString("month")
	// 判断是否获取到month
	if month != "" {

		// 当月总数据量
		count, _ = qs.Filter("pay_date", month).Count()
		qs.Filter("pay_date", month).Limit(pagePerNum).Offset(offsetNum).All(&salarySlips)

	} else {

		// 未获取前端输入month则显示所有
		month = time.Now().Format("2006-01")

		// 用户未输入则默认显示当月
		count, _ = qs.Filter("pay_date", month).Count()
		qs.Filter("pay_date", month).Limit(pagePerNum).Offset(offsetNum).All(&salarySlips)
	}

	// 总页数 (count) =  总数据量 / 每页数据量   注：需要转换成int类型
	countPage := int(math.Ceil(float64(count) / float64(pagePerNum)))

	// 判断上一页
	prePage := 1
	if currentPage == 1 {
		prePage = currentPage
	} else if currentPage > 1 {
		// 上一页
		prePage = currentPage - 1
	}

	// 下一页
	nextPage := 1
	// 如果当前页小于总页数
	if currentPage < countPage {
		// 下一页 就等于 当前页+1
		nextPage = currentPage + 1
		// 如果当前页面大于等于总页数
	} else if currentPage >= countPage {
		// 下一页 就等于 当前页
		nextPage = currentPage
	}

	// 引用倒入到函数page.go
	pageMap := utils.Paginator(currentPage, pagePerNum, count)

	// 4 输出数据
	c.Data["prePage"] = prePage         /* 上一页*/
	c.Data["nextPage"] = nextPage       /* 下一页 */
	c.Data["currentPage"] = currentPage /* 当前页 */
	c.Data["countPage"] = countPage     /* 总页数 */
	c.Data["count"] = count             /* 总数据量 */
	c.Data["page_map"] = pageMap
	c.Data["salary_slips"] = salarySlips
	c.Data["month"] = month
	c.TplName = "finance/salary-slip-list.html"
}
